home *** CD-ROM | disk | FTP | other *** search
/ IRIX Base Documentation 2001 May / SGI IRIX Base Documentation 2001 May.iso / usr / share / catman / p_man / cat3dm / video / mvp.z / mvp
Encoding:
Text File  |  1998-10-30  |  88.0 KB  |  1,915 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.                                                                         PPPPaaaaggggeeee 1111
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70. mmmmvvvvpppp((((3333ddddmmmm))))                                                              mmmmvvvvpppp((((3333ddddmmmm))))
  71.  
  72.  
  73.  
  74. NNNNAAAAMMMMEEEE
  75.      mvp - Multiport Video Processor for the O2 system
  76.  
  77.  
  78. DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
  79.      The MVP driver supports the O2 video input and output as well as the
  80.      screen capture devices.  It was designed and written to the device
  81.      dependent specification of the Video Library (VL) replacement for O2, DVL
  82.      (Direct Video Library, ie., no video daemon).  This new implementation of
  83.      the VL API has many new benefits:
  84.  
  85.  
  86.           ****   Events are naturally synchronous with data and there is
  87.               guaranteed an event for each data buffer.
  88.  
  89.  
  90.           ****   Turn around time and latency for VL commands is greatly reduced
  91.               since commands are executed directly instead of being passed to
  92.               the video daemon.
  93.  
  94.  
  95.           ****   It is fully integrated with Digital Media Buffers and DVL
  96.               supports a new buffering API that is compatible with other media
  97.               libraries, including the new compression library (dmIC), and the
  98.               new Movie Library.
  99.  
  100.  
  101.           ****   There is also a new buffer API for OpenGL on O2 that allows
  102.               exchanging data between video, graphics and compression without
  103.               the need to copy data from one format to another.
  104.  
  105.  
  106.           ****   The synchronization of Audio and Video is much better controlled
  107.               and is more easily attainable in the user process.
  108.  
  109.  
  110.  
  111.      VVVViiiiddddeeeeoooo IIIInnnnppppuuuutttt////OOOOuuuuttttppppuuuutttt CCCChhhhaaaannnnnnnneeeellllssss
  112.  
  113.        The Video Input/Output capabilities of the O2 are fully supported by
  114.        the MVP driver.  This includes both video and screen capture.  Some of
  115.        the features of the O2 video system include:
  116.  
  117.        ****    Video Input Connectors:  On the AV1 audio/video interface there
  118.             are the SVideo and Composite inputs as well as the digital camera.
  119.             A "dongle" is also available that can be attached to the camera
  120.             connector for 601 digital video input [contact SGI sales for more
  121.             information.])  On the AV2 audio/video interface card there are 2
  122.             BNC input digital connectors.  In addition, the Graphics Screen
  123.             can be an input and any output video may also be used as an input.
  124.  
  125.  
  126.  
  127.  
  128.  
  129.                                                                         PPPPaaaaggggeeee 2222
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136. mmmmvvvvpppp((((3333ddddmmmm))))                                                              mmmmvvvvpppp((((3333ddddmmmm))))
  137.  
  138.  
  139.  
  140.        ****    Video Input Channels:  2 independent input channels supporting
  141.             4:2:2 YUV or 1 channel supporting 4:2:2 YUV and 1 channel
  142.             supporting Alpha.
  143.  
  144.  
  145.        ****    Video Output Connectors:  On the AV1 interface, there are the
  146.             Svideo and Composite input and the same "dongle" refered to above
  147.             has a 601 digital video output.  On the AV2 audio/video interface
  148.             card there are 2 BNC output digital connectors.
  149.  
  150.  
  151.        ****    Video Output Channels:  1 output channel supporting either 4:2:2
  152.             YUV (to both output ports) or 4:2:2:4 YUVA (to two combined output
  153.             ports) (see VL_MVP_OUTPUT_ENABLE.)
  154.  
  155.  
  156.        ****    Clipping and down-scaling of image to virtually any size with
  157.             independent zooming in the X and Y directions on input.  Padding
  158.             of images on output (see VL_SIZE, VL_OFFSET, VL_ASPECT, VL_ORIGIN,
  159.             and VL_MVP_ZOOMSIZE).
  160.  
  161.  
  162.        ****    Either non-square or square (PAL or NTSC) pixel format in memory
  163.             (see VL_TIMING).
  164.  
  165.  
  166.        ****    Pbuffer and Mipmap generation for quick and efficient processing
  167.             with the O2 Graphics Engine (see VL_LAYOUT).
  168.  
  169.  
  170.        ****    Field or interleaved frame modes (see VL_CAP_TYPE).
  171.  
  172.  
  173.        ****    Various RGB and YUV colorspaces (see VL_PACKING).
  174.  
  175.  
  176. AAAAPPPPPPPPLLLLIIIICCCCAAAATTTTIIIIOOOONNNN IIIINNNNTTTTEEEERRRRFFFFAAAACCCCEEEE
  177.      Basic Program Structure
  178.  
  179.        The basic MVP VL application has the following components.  All of
  180.        these calls are described in the following sections with further
  181.        information available in both the VL manpages and the Digital Media
  182.        Programmer's Guide.
  183.  
  184.  
  185.      Preliminary path set up:
  186.  
  187.        vvvvllllOOOOppppeeeennnnVVVViiiiddddeeeeoooo       open the video server.
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.                                                                         PPPPaaaaggggeeee 3333
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202. mmmmvvvvpppp((((3333ddddmmmm))))                                                              mmmmvvvvpppp((((3333ddddmmmm))))
  203.  
  204.  
  205.  
  206.        vvvvllllGGGGeeeettttDDDDeeeevvvviiiicccceeeeLLLLiiiisssstttt   discover which devices and nodes are connected to
  207.                          this system.
  208.  
  209.  
  210.        vvvvllllGGGGeeeettttNNNNooooddddeeee         get the source and drain nodes.
  211.  
  212.  
  213.        vvvvllllCCCCrrrreeeeaaaatttteeeePPPPaaaatttthhhh      create a video path with the source and drain nodes
  214.                          specified.
  215.  
  216.  
  217.        vvvvllllSSSSeeeettttuuuuppppPPPPaaaatttthhhhssss      set the path up to be usable given the access
  218.                          requested.
  219.  
  220.  
  221.        vvvvllllDDDDeeeessssttttrrrrooooyyyyPPPPaaaatttthhhh     remove a video path.
  222.  
  223.  
  224.      Specific control settings:
  225.  
  226.  
  227.        vvvvllllSSSSeeeettttCCCCoooonnnnttttrrrroooollll      set various parameters associated with the video
  228.                          transfer.
  229.  
  230.  
  231.        vvvvllllGGGGeeeettttCCCCoooonnnnttttrrrroooollll      get various parameters associated with the video
  232.                          transfer.
  233.  
  234.  
  235.      Preparing to capture or output video to/from memory:
  236.  
  237.  
  238.        vvvvllllCCCCrrrreeeeaaaatttteeeeBBBBuuuuffffffffeeeerrrr
  239.  
  240.        vvvvllllRRRReeeeggggiiiisssstttteeeerrrrBBBBuuuuffffffffeeeerrrr     if needed, create and register a buffer using
  241.                             Digital Media Ring Buffers (DMRB).
  242.  
  243.  
  244.        ddddmmmmBBBBuuuuffffffffeeeerrrrCCCCrrrreeeeaaaatttteeeePPPPoooooooollll
  245.  
  246.        vvvvllllDDDDMMMMPPPPoooooooollllRRRReeeeggggiiiisssstttteeeerrrr     if needed, create and register a buffer pool using
  247.                             Digital Media Buffers (dmBuffers).
  248.  
  249.  
  250.      Starting and controlling the video transfer:
  251.  
  252.  
  253.        vvvvllllBBBBeeeeggggiiiinnnnTTTTrrrraaaannnnssssffffeeeerrrr     initiate the transfer
  254.  
  255.        vvvvllllEEEEnnnnddddTTTTrrrraaaannnnssssffffeeeerrrr       terminate the transfer
  256.  
  257.  
  258.  
  259.  
  260.  
  261.                                                                         PPPPaaaaggggeeee 4444
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268. mmmmvvvvpppp((((3333ddddmmmm))))                                                              mmmmvvvvpppp((((3333ddddmmmm))))
  269.  
  270.  
  271.  
  272.        vvvvllllNNNNeeeexxxxttttEEEEvvvveeeennnntttt         handle events from the video device using DMRB
  273.                            interface.
  274.  
  275.  
  276.        vvvvllllEEEEvvvveeeennnnttttRRRReeeeccccvvvv         handle events from the video device using dmBuffers
  277.                            interface.
  278.  
  279.  
  280.      Moving data buffers to and from the video system:
  281.  
  282.  
  283.  
  284.        vvvvllllGGGGeeeettttNNNNeeeexxxxttttVVVVaaaalllliiiidddd
  285.  
  286.        vvvvllllPPPPuuuuttttVVVVaaaalllliiiidddd          get and put buffers using DMRB interface.
  287.  
  288.  
  289.        vvvvllllEEEEvvvveeeennnnttttTTTTooooDDDDMMMMBBBBuuuuffffffffeeeerrrr
  290.  
  291.        vvvvllllDDDDMMMMBBBBuuuuffffffffeeeerrrrSSSSeeeennnndddd      get and send buffers using dmBuffers interface.
  292.  
  293.  
  294.  
  295. VVVVLLLL IIIInnnntttteeeerrrrffffaaaacccceeee RRRRoooouuuuttttiiiinnnneeeessss
  296.      Details of the VL interface routines that are specific to MVP are
  297.      described below.
  298.  
  299.  
  300.           vvvvllllOOOOppppeeeennnnVVVViiiiddddeeeeoooo((((cccchhhhaaaarrrr ****nnnnaaaammmmeeee))))
  301.  
  302.             This will load the VL library .dso into memory if it is not
  303.             already resident and it then will load any .dso's for the video
  304.             devices attached to the system.  For MVP, when it is loaded and
  305.             initialized does an inventory check of which options are available
  306.             and builds the node and control tables from this information.
  307.  
  308.             Additionally, MVP will sense the timing of the connected video
  309.             inputs and decide on a default input (see VL_DEFAULT_SOURCE).
  310.  
  311.  
  312.           vvvvllllGGGGeeeettttDDDDeeeevvvviiiicccceeeeLLLLiiiisssstttt((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr,,,, VVVVLLLLDDDDeeeevvvvLLLLiiiisssstttt ****))))
  313.             Returns the "mvp" device among any others that may be connected to
  314.             the system as well as which nodes are available on those devices.
  315.             Note that this list can be displayed using the vlinfo command.
  316.  
  317.  
  318.           vvvvllllIIIInnnniiiittttDDDDeeeevvvviiiicccceeee(((())))
  319.             Resets the device to a known state.
  320.  
  321.  
  322.  
  323.  
  324.  
  325.  
  326.  
  327.                                                                         PPPPaaaaggggeeee 5555
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334. mmmmvvvvpppp((((3333ddddmmmm))))                                                              mmmmvvvvpppp((((3333ddddmmmm))))
  335.  
  336.  
  337.  
  338.           vvvvllllSSSSaaaavvvveeeeSSSSyyyysssstttteeeemmmmDDDDeeeeffffaaaauuuullllttttssss(((())))
  339.             Saves whatever control settings are currently active into a
  340.             "system defaults" file, which for DVL is $HOME/.videopanelrc.
  341.             This file may be edited to adjust the settings for particular
  342.             applications.
  343.  
  344.  
  345.           vvvvllllRRRReeeessssttttoooorrrreeeeSSSSyyyysssstttteeeemmmmDDDDeeeeffffaaaauuuullllttttssss(((())))
  346.             Restores settings saved by "vlSaveSystemDefaults()".
  347.  
  348.  
  349.           vvvvllllRRRReeeessssttttoooorrrreeeeFFFFaaaaccccttttoooorrrryyyyDDDDeeeeffffaaaauuuullllttttssss
  350.             Restores the control settings that were initially set by the
  351.             system vendor.
  352.  
  353.  
  354. VVVVLLLL PPPPaaaatttthhhh RRRRoooouuuuttttiiiinnnneeeessss
  355.           vvvvllllGGGGeeeettttNNNNooooddddeeee((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr,,,, ttttyyyyppppeeee,,,, kkkkiiiinnnndddd,,,, nnnnuuuummmmbbbbeeeerrrr))))
  356.             A node satisifying the "type", "kind" and "number" is returned.
  357.             The types supported by MVP are VL_SRC, VL_DRN and VL_DEVICE.  The
  358.             kind may be one of VL_VIDEO, VL_MEMORY, or VL_SCREEN.  The number
  359.             should be a valid number from the node table obtained with the
  360.             vlGetDeviceList() routine.
  361.  
  362.             Or the number may be VL_ANY which for the VL_SRC/VL_VIDEO node
  363.             specifies that the user program wants the "VL_DEFAULT_SOURCE" node
  364.             that is automatically set when the video program starts or is
  365.             selected via the Video Control Panel.
  366.  
  367.             VL_ANY for the VL_MEM node specifies that a non-busy memory node
  368.             should be selected.  (See vlSetupPaths() below for more details.)
  369.  
  370.             In addition to the above effects, the handling of the node may be
  371.             different after the stream is pre-empted and restarted (see
  372.             VLStreamPreempted() below).
  373.  
  374.             The following is a description of each of the nodes that the
  375.             hardware and driver support.  The complete node list can be
  376.             obtained with the vlinfo command.  See the example near the end of
  377.             this manpage for selecting video input nodes.
  378.  
  379.  
  380.             VVVVLLLL____VVVVIIIIDDDDEEEEOOOO
  381.                  The Video nodes are the external connections to the system,
  382.                  with some exceptions listed below.  To select the desired
  383.                  node, find the entry in the node list for the device "mvp" in
  384.                  the return argument of vlGetDeviceList() and then use the
  385.                  node "number" in the vlGetNode call.
  386.  
  387.                  The Loopback video node supports capturing back into the
  388.                  system the video that is being output via Video Out.  There
  389.                  are uses beyond diagnostics such as generating graphic
  390.  
  391.  
  392.  
  393.                                                                         PPPPaaaaggggeeee 6666
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400. mmmmvvvvpppp((((3333ddddmmmm))))                                                              mmmmvvvvpppp((((3333ddddmmmm))))
  401.  
  402.  
  403.  
  404.                  texture maps from decompressed video.
  405.  
  406.                  Note that since all outputs are active simulataneously, they
  407.                  are treated as a single Node.  Which part of the output video
  408.                  stream that is routed to which connecter is selected by the
  409.                  VL_MVP_OUTPUT_ENABLE control.
  410.  
  411.                  To use the Digital Video in and out with an AV1 card, a "D1
  412.                  Dongle" is required [contact SGI sales for more information].
  413.                  Alternatively, the O2 Digital Camera may be connected as an
  414.                  input only device, which has a builtin microphone.
  415.  
  416.  
  417.             VVVVLLLL____SSSSCCCCRRRREEEEEEEENNNN
  418.                  The Screen node is the Graphics Engine capture path.  It
  419.                  supports capturing a section of the screen as well as the
  420.                  full screen.  The data is captured after the Gamma Correction
  421.                  is applied, but before the Digital to Analog conversion.
  422.  
  423.  
  424.             VVVVLLLL____MMMMEEEEMMMM
  425.                  The Memory nodes are the DMA engines and there are 4
  426.                  available, 2 for input from video, 1 for input from the
  427.                  screen and 1 for output to video.
  428.  
  429.  
  430.  
  431.           vvvvllllCCCCrrrreeeeaaaatttteeeePPPPaaaatttthhhh((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr,,,, VVVVLLLLDDDDeeeevvvv,,,, VVVVLLLLNNNNooooddddeeee,,,, VVVVLLLLNNNNooooddddeeee))))
  432.  
  433.             The vlCreatePath will create a path that has the first VLNode as
  434.             the source and the second VLNode as the drain.  If either are
  435.             VL_ANY then both must be VL_ANY and the path is not usable as a
  436.             data transferring path until nodes are added with vlAddNode().
  437.  
  438.             A path that is not intended to be used as a data transfer path may
  439.             have as many nodes attached as they exist for a given device.  The
  440.             use of this kind of path is primarily for getting and setting the
  441.             various controls of the different video devices and is known as a
  442.             "DevPath".
  443.  
  444.             If the path is not a DevPath, then the source and drain must be
  445.             valid nodes and for MVP, the only other connection allowed is a
  446.             VL_DEVICE node.
  447.  
  448.             Note that in DVL/MVP, a path is unique to a process only, and not,
  449.             as in the old VL, unique within a system.  That means that a
  450.             VLPath can only be used within the user process that created it,
  451.             and can not be passed to other processes.
  452.  
  453.  
  454.  
  455.  
  456.  
  457.  
  458.  
  459.                                                                         PPPPaaaaggggeeee 7777
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466. mmmmvvvvpppp((((3333ddddmmmm))))                                                              mmmmvvvvpppp((((3333ddddmmmm))))
  467.  
  468.  
  469.  
  470.           vvvvllllDDDDeeeessssttttrrrrooooyyyyPPPPaaaatttthhhh((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr,,,, VVVVLLLLPPPPaaaatttthhhh))))
  471.             The path specified is removed from the system.
  472.  
  473.  
  474.           vvvvllllAAAAddddddddNNNNooooddddeeee((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr,,,, VVVVLLLLPPPPaaaatttthhhh,,,, VVVVLLLLNNNNooooddddeeee))))
  475.             vlAddNode is used to add nodes to a path.  The nodes are gotten
  476.             with vlGetNode().
  477.  
  478.  
  479.           vvvvllllRRRReeeemmmmoooovvvveeeeNNNNooooddddeeee((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr,,,, VVVVLLLLPPPPaaaatttthhhh,,,, VVVVLLLLNNNNooooddddeeee))))
  480.             The node is removed from the path.
  481.  
  482.  
  483.           vvvvllllSSSSeeeettttuuuuppppPPPPaaaatttthhhhssss((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr,,,,VVVVLLLLPPPPaaaatttthhhhLLLLiiiisssstttt,,,,ccccoooouuuunnnntttt,,,,ccccttttrrrrllllUUUUssssaaaaggggeeee,,,,ssssttttrrrrmmmmUUUUssssaaaaggggeeee))))
  484.             VLSetupPaths() takes an array of paths.  It attempts to set up
  485.             these paths one by one in the order they appear in the array.  If
  486.             a path set up fails, the call is aborted at the point of failure.
  487.             No attempt is made to unwind the actions already performed: paths
  488.             that got set up are left set up, the path that failed is left at
  489.             its former usage levels (though there may have been side effects),
  490.             and paths following that one in the path array that failed are not
  491.             set up.
  492.  
  493.             The following usages may be specified:
  494.  
  495.                 VL_DONE_USING
  496.                 VL_READ_ONLY
  497.                 VL_SHARE
  498.                 VL_LOCK
  499.  
  500.             Note that if either usage is specified as VL_DONE_USING then both
  501.             must be specified as VL_DONE_USING.  This essentially releases the
  502.             resources held by the path.
  503.  
  504.             To set up each path in the array of paths, the following algorithm
  505.             is used:  For each node on the path, the desired new usage level
  506.             is compared to the current usage level (for both control and
  507.             stream usage), using the following table to determine one of three
  508.             outcomes:
  509.  
  510.                 OK      - the node can be put into this new usage level
  511.                 PREEMPT - the node can be put into this new usage level,
  512.                           but the other path must get preempted off
  513.                 FAIL    - the node cannot be put into this new usage level
  514.  
  515.             If FAIL occurs, the path cannot be set up as desired, and the call
  516.             to VLSetupPaths() fails at this point.  If PREEMPT occurs, the
  517.             other path is put on a list of paths to be preempted if this
  518.             vlPathSetup() doesn't fail.  All the nodes are checked before any
  519.             preempting is done, and all preempting is done before this path is
  520.             actually set up.
  521.  
  522.  
  523.  
  524.  
  525.                                                                         PPPPaaaaggggeeee 8888
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532. mmmmvvvvpppp((((3333ddddmmmm))))                                                              mmmmvvvvpppp((((3333ddddmmmm))))
  533.  
  534.  
  535.  
  536.             The test must be made for each node in the path to be set up,
  537.             against all paths that already have the node.  If any FAIL's occur
  538.             in any of these tests, the path set up fails.  Otherwise, it will
  539.             preempt all paths that generated a PREEMPT result for any of the
  540.             tests.
  541.  
  542.                          New Usage
  543.                        +------------+------------+---------+---------+
  544.             Current    | DONE_USING |  READ_ONLY |  SHARE  |  LOCK   |
  545.             Usage      +============+============+=========+=========+
  546.             DONE_USING |     OK     |     OK     |   OK    |   OK    |
  547.                        +------------+------------+---------+---------+
  548.              READ_ONLY |     OK     |     OK     |   OK    |   OK    |
  549.                        +------------+------------+---------+---------+
  550.                  SHARE |     OK     |     OK     | PREEMPT | PREEMPT |
  551.                        +------------+------------+---------+---------+
  552.                   LOCK |     OK     |     OK     |  FAIL   |  FAIL   |
  553.                        +------------+------------+---------+---------+
  554.  
  555.  
  556.             This table is used for both Control Usage and Stream Usage with
  557.             one difference: if a node is at control SHARE usage, another node
  558.             may also take it in control SHARE usage, but if a node is in
  559.             stream SHARE usage, its path gets preempted when another node
  560.             takes stream SHARE usage.
  561.  
  562.             In addition, if the node is a specific VL_SRC/VL_VIDEO node, then
  563.             two paths may have it's streamUsage VL_LOCK, though only one of
  564.             it's controlUsage can have VL_LOCK access.  This allows a user
  565.             application to lock both inputs to a video node to prevent either
  566.             one of them from becoming preempted.
  567.  
  568.             If a path cannot be set up with the desired access it is then
  569.             automatically set up with VL_READ_ONLY access.  This allows the
  570.             user program to wait for Stream and/or Control Available events
  571.             and reattempt the vlSetupPaths.
  572.  
  573.  
  574.  
  575. MMMMVVVVPPPP CCCCoooonnnnttttrrrroooollllssss
  576.           There are 2 types of VL Controls in MVP, "path" controls and
  577.           "device" controls.  The distinction between these two is:
  578.  
  579.           Path Controls are those controls that are capable or actively
  580.           controlling a transfer, suce as VL_SIZE, VL_OFFSET, VL_ZOOM, etc.
  581.           These controls are private to a path and any changes (with some
  582.           exceptions) cause events to be sent ONLY to the process owning the
  583.           path.  Note these controls are active while the path is
  584.           transferring, and retain their values when the transfer is suspended
  585.           for any reason.  In practice, this means the user program should be
  586.           able to set up the desired transfer controls, and start the transfer
  587.           after any preemption without needing to restore controls to their
  588.  
  589.  
  590.  
  591.                                                                         PPPPaaaaggggeeee 9999
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598. mmmmvvvvpppp((((3333ddddmmmm))))                                                              mmmmvvvvpppp((((3333ddddmmmm))))
  599.  
  600.  
  601.  
  602.           previous values.
  603.  
  604.           Device Controls are those controls that are outside the realm of a
  605.           "path" and could possibly effect the data that another path is
  606.           processing.  These include such controls as VL_BRIGHTNESS and
  607.           VL_CONTRAST.  And since most of these controls directly affect some
  608.           hardware change, they will retain their values after the paths are
  609.           removed.
  610.  
  611.           In the descriptions below, the first name is the VLControl name, the
  612.           second is the ascii string associated with the control, the third
  613.           specifies which nodes this control can be applied to, the fourth
  614.           specifies whether it is a path control or a device control, and the
  615.           fifth specifies the type of value the control accepts,
  616.  
  617.           Note that the ascii name is used to assign values to controls in the
  618.           VL System Defaults file and can also be found in the control table
  619.           gotten via a vlGetControlList().
  620.  
  621.           Nodes the control may be applied are:
  622.  
  623.               (VL_SRC/VL_VIDEO)  - source video node
  624.               (VL_DRN/VL_VIDEO)  - drain video node
  625.               (VL_ANY/VL_VIDEO)  - source or drain video node
  626.  
  627.               (VL_SRC/VL_SCREEN) - source screen node
  628.  
  629.               (VL_SRC/VL_MEM)    - source memory node
  630.               (VL_DRN/VL_MEM)    - drain memory node
  631.               (VL_ANY/VL_MEM)    - source or drain memory node
  632.  
  633.               -RO                - read only for that node
  634.  
  635.  
  636.           Value types are:
  637.  
  638.                   "(t,f)" - boolVal  - true or false
  639.                   "(n,d)" - fractVal - fraction value
  640.                   "(int)" - intVal   - integer value
  641.                   "(x,y)" - xyVal    - integer X and Y values
  642.  
  643.  
  644.  
  645.  
  646.           VVVVLLLL____DDDDEEEEFFFFAAAAUUUULLLLTTTT____SSSSOOOOUUUURRRRCCCCEEEE
  647.             "default_input" (VL_SRC/VL_VIDEO) device (int)
  648.  
  649.             Specifies which of the input nodes is to be considered the
  650.             "default" input.  This is automatically set up when the video
  651.             driver is loaded according to the following table:
  652.  
  653.  
  654.  
  655.  
  656.  
  657.                                                                        PPPPaaaaggggeeee 11110000
  658.  
  659.  
  660.  
  661.  
  662.  
  663.  
  664. mmmmvvvvpppp((((3333ddddmmmm))))                                                              mmmmvvvvpppp((((3333ddddmmmm))))
  665.  
  666.  
  667.  
  668.                 Input signal(s) active             Default_Source
  669.  
  670.                 digital svideo  composite  camera
  671.                  yes     x        x         x       digital
  672.                  no      yes      x         x       svideo
  673.                  no      no       yes       x       composite
  674.                  no      no       no        yes     camera
  675.                  no      no       no        no      composite
  676.  
  677.             For example, if a VCR is connected to the SVideo input and it is
  678.             powered on, then it will be the default input.
  679.  
  680.             When the VL_DEFAULT_SOURCE is changed a VLDefaultSource event is
  681.             sent to all processes that have this event enabled in their
  682.             vlEventMask (see MVP Events below).
  683.  
  684.  
  685.           VVVVLLLL____TTTTIIIIMMMMIIIINNNNGGGG
  686.             "timing" (VL_SRC/VL_VIDEO) device (int)
  687.  
  688.             The VL_TIMING control is adjusts the video filter for different
  689.             video standards.  There are currently 4 available in MVP:
  690.  
  691.             VL_TIMING_525_CCIR601
  692.             VL_TIMING_625_CCIR601
  693.  
  694.                  The 525 (NTSC) or 625 (PAL) timing stardards are specified
  695.                  and the pixels are considered to be in the accepted video
  696.                  aspect ratio (4:3) for that standard (this is also known as
  697.                  "non-square" timing).
  698.  
  699.             VL_TIMING_525_SQ_PIX
  700.             VL_TIMING_625_SQ_PIX
  701.  
  702.  
  703.                  The 525 (NTSC) or 625 (PAL) timing stardards are specified
  704.                  and in addition a square <-> non-square pixel filter is
  705.                  engaged so that in memory, the pixels are in a 1:1 aspect
  706.                  ratio which is compatible with the Graphics Engine.
  707.  
  708.             When these timings are applied to a path that has the O2 Digital
  709.             Camera attached, then the 525 (NTSC) timing standard is
  710.             interpreted to mean that external pixels are in a 1:1 aspect
  711.             ratio, and there are no "non-square" or PAL formats available for
  712.             the internal pixels.
  713.  
  714.             Note that the application program should always check the default
  715.             VL_SIZE after a timing change to determine what the size of the
  716.             resultant images will be.
  717.  
  718.             For the square to non-square conversion a ratio of 11/10 for NTSC,
  719.             and a ratio of 11/12 for PAL is applied.
  720.  
  721.  
  722.  
  723.                                                                        PPPPaaaaggggeeee 11111111
  724.  
  725.  
  726.  
  727.  
  728.  
  729.  
  730. mmmmvvvvpppp((((3333ddddmmmm))))                                                              mmmmvvvvpppp((((3333ddddmmmm))))
  731.  
  732.  
  733.  
  734. MMMMVVVVPPPP IIIImmmmaaaaggggeeee PPPPaaaarrrraaaammmmeeeetttteeeerrrrssss
  735.      Consider the following diagram for a video field:
  736.  
  737.  
  738.            EAV      SAV                                       EAV
  739.      FOL    +--------+-----------------------------------------+
  740.             |        |                                         |
  741.             |        |                                         |
  742.             |        |                                         |
  743.             |        |                                         |
  744.             |        | Vertical Ancilliary Data (VANC)         |
  745.             |        | Blanking region  including VITC,CC      |
  746.             |        |                                         |
  747.      FAL    |        +-----------------------------------------+
  748.             |  H A D | VL_OFFSET (0,0)                         |
  749.             |  o n a |                                         |
  750.             |  r c t |                                         |
  751.             |  i i a |        Active Video                     |
  752.             |  z l   |                                         |
  753.             |  o l   |                                         |
  754.             |  n i   |                                         |
  755.             |  t a   |                                         |
  756.             |  a r   |                                         |
  757.             |  l y   |                                         |
  758.             | (HANC) |                                 VL_SIZE |
  759.      LAL    |        +-----------------------------------------+
  760.             |        |  Blanking region                        |
  761.      SOFC   +--------------------------------------------------+
  762.  
  763.  
  764.      EAV - end of active video
  765.      SAV - start of active video
  766.  
  767.      FOL - first output line
  768.      FAL - first active line
  769.      LAL - last active line
  770.      SOFC - start of field count
  771.  
  772.  
  773.      The data contained within the area labeled "Active Video" is the default
  774.      of which data is transferred to and from memory.  But the hardware and
  775.      video driver allow the transfer to include most all the portion of the
  776.      "hidden" video, or the Horizontal and/or Vertical Ancilliary Data
  777.      (HANC/VANC).
  778.  
  779.      Note that these controls are all "Path Controls".
  780.  
  781.      VVVVLLLL____OOOORRRRIIIIGGGGIIIINNNN "origin" (VL_SRC/VL_SCREEN, VL_DRN/VL_MEM) path (x,y)
  782.  
  783.      Used on the screen capture device to specify the origin of the capture
  784.      area.  For Video input, the VL_ORIGIN can be used to specify a "black
  785.      fill" region.
  786.  
  787.  
  788.  
  789.                                                                        PPPPaaaaggggeeee 11112222
  790.  
  791.  
  792.  
  793.  
  794.  
  795.  
  796. mmmmvvvvpppp((((3333ddddmmmm))))                                                              mmmmvvvvpppp((((3333ddddmmmm))))
  797.  
  798.  
  799.  
  800.      VVVVLLLL____OOOOFFFFFFFFSSSSEEEETTTT "offset" (VL_ANY/VL_MEM) path (x,y)
  801.  
  802.      Used on the memory node specify the upper left corner of the active video
  803.      region.  For input, the area to the left and above the VL_OFFSET is
  804.      removed.  For output, the same region is filled with "black".
  805.  
  806.      Limitations of the value of VL_OFFSET are that the resultant offset must
  807.      be on a 2 pixel boundary.  In addition, the following limits are imposed:
  808.  
  809.          VL_TIMING               Minimum VL_OFFSET
  810.          ---------               -----------------
  811.          VL_TIMING_525_CCIR601       -134, -15
  812.          VL_TIMING_625_CCIR601       -140, -21
  813.          VL_TIMING_525_SQ_PIX           0, -15
  814.          VL_TIMING_625_SQ_PIX           0, -21
  815.  
  816.  
  817.      VVVVLLLL____SSSSIIIIZZZZEEEE "size" (VL_ANY/VL_MEM) path (x,y)
  818.  
  819.      Used on the memory nodes to specify the lower right corner of the active
  820.      video region (VL_OFFSET + VL_SIZE == lower right corner).  For input, the
  821.      area to the right and below this corner is removed.  For output, the same
  822.      region is filled with "black".
  823.  
  824.      VL_SIZE has a default according to the following table:
  825.  
  826.          VL_TIMING                  VL_SIZE
  827.          ---------                  --------
  828.          VL_TIMING_525_CCIR601      720, 243
  829.          VL_TIMING_625_CCIR601      720, 288
  830.          VL_TIMING_525_SQ_PIX       640, 240
  831.          VL_TIMING_625_SQ_PIX       768, 288
  832.  
  833.  
  834.      The actual size is affected by VL_ZOOM and VL_ASPECT (see VL_ASPECT
  835.      below), though both of these are defaulted to 1,1.
  836.  
  837.      If the VL_CAP_TYPE ("fieldmode") is VL_CAPTURE_INTERLEAVED, then the
  838.      vertical or "y" size is doubled.
  839.  
  840.      Limitations of the value of VL_SIZE are that the resultant size must be
  841.      on a 2 pixel boundary and the number of bytes to be transferred must be a
  842.      multiple of 8.
  843.  
  844.      In addition, there is a limit to the number of pixels that may be
  845.      captured:
  846.  
  847.          VL_TIMING                 Maximum VL_SIZE - VL_OFFSET
  848.          ---------                 -------------------
  849.          VL_TIMING_525_CCIR601       856, 261
  850.          VL_TIMING_625_CCIR601       860, 311
  851.          VL_TIMING_525_SQ_PIX        778, 261
  852.  
  853.  
  854.  
  855.                                                                        PPPPaaaaggggeeee 11113333
  856.  
  857.  
  858.  
  859.  
  860.  
  861.  
  862. mmmmvvvvpppp((((3333ddddmmmm))))                                                              mmmmvvvvpppp((((3333ddddmmmm))))
  863.  
  864.  
  865.  
  866.          VL_TIMING_625_SQ_PIX        934, 311
  867.  
  868.  
  869.      VVVVLLLL____ZZZZOOOOOOOOMMMM "zoom" (VL_ANY/VL_MEM) path (n,d)
  870.  
  871.      Specifies the decimation of the input video to some fraction of it's
  872.      original size.  Scaling from 1/1 downto 1/256 is available with the
  873.      actual increments being:
  874.  
  875.          256 ... 1
  876.          ---------
  877.            256
  878.  
  879.      The actual zoom value is affected by VL_ASPECT (see next section).
  880.  
  881.      Note that this control is only available on the VL_DRN/VL_MEM (input)
  882.      node.
  883.  
  884.      VVVVLLLL____MMMMVVVVPPPP____ZZZZOOOOOOOOMMMMSSSSIIIIZZZZEEEE "zoomsize" (VL_ANY/VL_MEM) path (x,y)
  885.  
  886.      Specifies the decimation of the input video to some fraction of it's
  887.      original size and is independently zoomable in the X and Y directions.
  888.      The supplied x,y is used as a guideline to obtain the desired size and
  889.      VL_SIZE should be used to get the actualy size of the incoming video.
  890.  
  891.      VVVVLLLL____AAAASSSSPPPPEEEECCCCTTTT "aspect" (VL_ANY/VL_MEM) path (n,d)
  892.  
  893.      VL_ASPECT is used to modify the input size to compensate for the aspect
  894.      distortion caused by capturing fields only.  The values are 1,1 (default)
  895.      and 1,2.  The effect on the VL_ZOOM is:
  896.  
  897.  
  898.          X SIZE = VL_SIZE.X * VL_ZOOM * VL_ASPECT
  899.          Y SIZE = VL_SIZE.Y * VL_ZOOM
  900.  
  901.          X OFFSET = VL_OFFSET.X * VL_ZOOM * VL_ASPECT
  902.          Y OFFSET = VL_OFFSET.Y * VL_ZOOM
  903.  
  904.  
  905.      VVVVLLLL____CCCCAAAAPPPP____TTTTYYYYPPPPEEEE "fieldmode" (VL_ANY/VL_MEM) path (int)
  906.  
  907.      VVVVLLLL____CCCCAAAAPPPPTTTTUUUURRRREEEE____IIIINNNNTTTTEEEERRRRLLLLEEEEAAAAVVVVEEEEDDDD
  908.  
  909.      This captures or sends buffers that contain both the odd (F1) and even
  910.      (F2) fields interlaced in memory.  A side effect of changing from "non-
  911.      interleaved" to "interleaved" is that the VL_RATE will be halved.
  912.  
  913.      VVVVLLLL____CCCCAAAAPPPPTTTTUUUURRRREEEE____NNNNOOOONNNNIIIINNNNTTTTEEEERRRRLLLLEEEEAAAAVVVVEEEEDDDD
  914.  
  915.      This captures or sends buffers that contain only one field each but are
  916.      transferred in pairs keeping the odd (F1) and even (F2) field of a
  917.      picture together.  A side effect of this characteristic, if a transfer
  918.  
  919.  
  920.  
  921.                                                                        PPPPaaaaggggeeee 11114444
  922.  
  923.  
  924.  
  925.  
  926.  
  927.  
  928. mmmmvvvvpppp((((3333ddddmmmm))))                                                              mmmmvvvvpppp((((3333ddddmmmm))))
  929.  
  930.  
  931.  
  932.      error occurs in the second field, then the first is not transferred.
  933.  
  934.      In addition, VL_RATE is effective on a pair of fields, though it is still
  935.      interpreted as a field rate.  What this means is that if a field is to be
  936.      dropped because of the effects of VL_RATE, then both fields are dropped.
  937.  
  938.      Also, changing from "interleaved" to "non-interleaved" causes the VL_RATE
  939.      to be doubled.
  940.  
  941.      VVVVLLLL____CCCCAAAAPPPPTTTTUUUURRRREEEE____FFFFIIIIEEEELLLLDDDDSSSS
  942.  
  943.      This captures or sends buffers that contain only one field each and are
  944.      tranferred individually.  Since these are seperate fields then VL_RATE is
  945.      effective on individual fields, and a single field may be dropped.
  946.  
  947.      Also, changing from "interleaved" to "fields" causes the VL_RATE to be
  948.      doubled.
  949.  
  950.      VVVVLLLL____CCCCAAAAPPPPTTTTUUUURRRREEEE____EEEEVVVVEEEENNNN____FFFFIIIIEEEELLLLDDDDSSSS
  951.      VVVVLLLL____CCCCAAAAPPPPTTTTUUUURRRREEEE____OOOODDDDDDDD____FFFFIIIIEEEELLLLDDDDSSSS
  952.  
  953.  
  954.      This captures only the even (F2) or odd (F1) fields.  For output the
  955.      field is transferred during both field times.
  956.  
  957.      VVVVLLLL____PPPPAAAACCCCKKKKIIIINNNNGGGG "packing" (VL_ANY/VL_MEM) path (int)
  958.  
  959.      "rgba_8888" VL_PACKING_ABGR_8
  960.  
  961.      This is actually RGBA format in memory and is the native OpenGL pixel
  962.      format.
  963.  
  964.      "abgr_8888" VL_PACKING_RGBA_8
  965.  
  966.      This is actually ABGR format in memory, with the alpha being supplied by
  967.      the alpha register.  These are compatible with Iris GL as well as VINO
  968.      and Galileo/IndyVideo.
  969.  
  970.      "uyvy_422_8" VL_PACKING_YVYU_422_8
  971.  
  972.      This is actually UYVY in memory (Cb0 Y0 Cr0 Y1), 8 bits per component.
  973.  
  974.      "uyvy_422_10" VL_PACKING_UYVY_422_10
  975.  
  976.      This is actually UYVY in memory (Cb0 Y0 Cr0 Y1) with 10 bits per
  977.      component left justified in 16 bit words.
  978.  
  979.      "vyua_4224_8" VL_PACKING_AUYV_4444_8
  980.  
  981.      This is actually VYUA in memory (Cr0 Y0 Cb0 A0 Cr0 Y1 Cb0 A1) with 8 bits
  982.      per component and is compatible with the 4:4:4:4 format.
  983.  
  984.  
  985.  
  986.  
  987.                                                                        PPPPaaaaggggeeee 11115555
  988.  
  989.  
  990.  
  991.  
  992.  
  993.  
  994. mmmmvvvvpppp((((3333ddddmmmm))))                                                              mmmmvvvvpppp((((3333ddddmmmm))))
  995.  
  996.  
  997.  
  998.      "argb_1555" VL_PACKING_RGBA_5551
  999.  
  1000.      This is a 16 OpenGL format laid out in memory as A(1 bit), R(5 bits), G(5
  1001.      bits), and B(5 bits).
  1002.  
  1003.  
  1004.      VVVVLLLL____SSSSYYYYNNNNCCCC "sync" (VL_DRN/VL_VIDEO) path (int)
  1005.  
  1006.      The VL_SYNC selects the type of sync used for video output.  The choices
  1007.      are:
  1008.  
  1009.      "Internal" VL_SYNC_INTERNAL
  1010.  
  1011.      The timing for the output is generated using an internal oscillator
  1012.      appropriate for the timing required (NTSC or PAL).
  1013.  
  1014.      "Genlock" VL_SYNC_GENLOCK
  1015.  
  1016.      The timing for the output is "genlocked" to the VL_SYNC_ SOURCE.
  1017.  
  1018.  
  1019.      VVVVLLLL____SSSSYYYYNNNNCCCC____SSSSOOOOUUUURRRRCCCCEEEE "sync_source" (VL_DRN/VL_VIDEO) path (int) VL_SYNC_SOURCE
  1020.      selects which sync source is used when VL_SYNC is set to VL_SYNC_GENLOCK.
  1021.      The values for VL_SYNC_SOURCE are:
  1022.  
  1023.          "External",               MVP_SYNC_SOURCE_EXT
  1024.          "SVideo/Composite",       MVP_SYNC_SOURCE_AB
  1025.          "Camera/Digital Video",   MVP_SYNC_SOURCE_CD
  1026.  
  1027.  
  1028.      VVVVLLLL____LLLLAAAAYYYYOOOOUUUUTTTT "layout" (VL_ANY/VL_MEM) path (int)
  1029.  
  1030.      "Linear" VL_LAYOUT_LINEAR
  1031.  
  1032.      The video pixels are arranged in memory in a "linear" fashion.
  1033.  
  1034.      "Graphics" VL_LAYOUT_GRAPHICS
  1035.  
  1036.      The video pixels are arranged in memory in a "pbuffer" fashion that is
  1037.      compatible with the O2 OpenGL.
  1038.  
  1039.      "Mipmap" VL_LAYOUT_MIPMAP
  1040.  
  1041.      The video pixels are arranged in memory in a "texture" or "mimmapped"
  1042.      fashion that is compatible with the O2 OpenGL.
  1043.  
  1044.  
  1045.  
  1046. MMMMVVVVPPPP SSSSiiiiggggnnnnaaaallll QQQQuuuuaaaalllliiiittttyyyy CCCCoooonnnnttttrrrroooollllssss
  1047.          VL_BRIGHTNESS
  1048.          VL_CONTRAST
  1049.          VL_H_PHASE
  1050.  
  1051.  
  1052.  
  1053.                                                                        PPPPaaaaggggeeee 11116666
  1054.  
  1055.  
  1056.  
  1057.  
  1058.  
  1059.  
  1060. mmmmvvvvpppp((((3333ddddmmmm))))                                                              mmmmvvvvpppp((((3333ddddmmmm))))
  1061.  
  1062.  
  1063.  
  1064.          VL_HUE
  1065.          VL_SATURATION
  1066.          VL_RED_SETUP
  1067.          VL_GREEN_SETUP
  1068.          VL_GRN_SETUP
  1069.          VL_BLUE_SETUP
  1070.          VL_BLU_SETUP
  1071.          VL_ALPHA_SETUP
  1072.          VL_V_PHASE
  1073.  
  1074.      Most of these controls have a user selection mechanism on the
  1075.      videopanel(1).  See mvp(7) for more details.
  1076.  
  1077.      VVVVLLLL____SSSSIIIIGGGGNNNNAAAALLLL "signal" (VL_DRN/VL_VIDEO) device & path (int)
  1078.          VL_SIGNAL_BLACK
  1079.          VL_SIGNAL_REAL_IMAGE
  1080.          VL_SIGNAL_NOTHING
  1081.          VL_SIGNAL_COLOR_BARS
  1082.  
  1083.      This control affects both the "quiescent" state of video output, as well
  1084.      as active transfers to video output.  When the channel is not in use,
  1085.      then the output channel will output "black" or a passthru feed of the
  1086.      active input "image".  For the analog outputs (SVideo and Composite),
  1087.      "colorbars" can also be selected.
  1088.  
  1089.      During an active transfer, when the user application fails to deliver an
  1090.      output image within the time required by the timing standard, then the
  1091.      driver selects what to do based on the signal setting.  if the signal is
  1092.      set to "black" (or "colorbars"), the output will be black causing
  1093.      flashing on the output.  This is useful to determine if the application
  1094.      is not "keeping up" with the output.
  1095.  
  1096.      If the signal is set to "image", then the driver will repeat the previous
  1097.      two fields.  This requires that the driver actually hold onto these two
  1098.      buffers, releasing them when two more fields are delivered from the user.
  1099.      This increases the overall number of buffers required for processing by 1
  1100.      for INTERLEAVED or NONINTERLEAVED capture modes.
  1101.  
  1102.      VVVVLLLL____FFFFLLLLIIIICCCCKKKKEEEERRRR____FFFFIIIILLLLTTTTEEEERRRR "flicker_filter" (VL_SRC/VL_SCREEN) device (t,f)
  1103.  
  1104.      Enables or disables the "flicker" filter for screen capture.
  1105.  
  1106.      VVVVLLLL____DDDDIIIITTTTHHHHEEEERRRR____FFFFIIIILLLLTTTTEEEERRRR "dither_filter" (VL_SRC/VL_VIDEO) device (t,f)
  1107.  
  1108.      Enables or disables the "dither" filter on video input.
  1109.  
  1110.      VVVVLLLL____NNNNOOOOTTTTCCCCHHHH____FFFFIIIILLLLTTTTEEEERRRR "notch_filter" (VL_DRN/VL_VIDEO) device (t,f)
  1111.  
  1112.      Enables or disables the "notch" filter on video output.
  1113.  
  1114.  
  1115.  
  1116.  
  1117.  
  1118.  
  1119.                                                                        PPPPaaaaggggeeee 11117777
  1120.  
  1121.  
  1122.  
  1123.  
  1124.  
  1125.  
  1126. mmmmvvvvpppp((((3333ddddmmmm))))                                                              mmmmvvvvpppp((((3333ddddmmmm))))
  1127.  
  1128.  
  1129.  
  1130. MMMMVVVVPPPP SSSSppppeeeecccciiiiffffiiiicccc CCCCoooonnnnttttrrrroooollllssss
  1131.      These controls are in the <dmedia/dev_mvp.h> header file.
  1132.  
  1133.      VVVVLLLL____MMMMVVVVPPPP____OOOOUUUUTTTTPPPPUUUUTTTT____EEEENNNNAAAABBBBLLLLEEEE
  1134.  
  1135.      This controls what part of the output video is routed to which output
  1136.      jacks.  It only really matters for those formats which include an Alpha
  1137.      component though it can also be used to effect a software "passthru"
  1138.      switch.
  1139.  
  1140.  
  1141.      "Pixels/Pixels" Output pixels to both primary (analog/primary D1) and
  1142.      secondary (digital/secondary D1) jacks.
  1143.  
  1144.      "Pixels/Alpha" Output pixels to the primary (analog/primary D1) jack and
  1145.      alpha to the secondary (digital/secondary D1) jack.
  1146.  
  1147.      "Alpha/Pixels" Output alpha to the primary (analog/primary D1) jack and
  1148.      pixels to the secondary (digital/secondary D1) jack.
  1149.  
  1150.      "Alpha/Alpha" Output alpha to both primary (analog/primary D1) and
  1151.      secondary (digital/secondary D1) jacks.
  1152.  
  1153.      "Passthru/Passthru" Output the input selected by the genlock source to
  1154.      both primary (analog/primary D1) and secondary (digital/secondary D1)
  1155.      jacks.
  1156.  
  1157.  
  1158. MMMMVVVVPPPP BBBBuuuuffffffffeeeerrrr aaaannnndddd EEEEvvvveeeennnntttt RRRRoooouuuuttttiiiinnnneeeessss
  1159.      The buffer routines allocate a pool to use during the video transfer and
  1160.      the event routines are used to control the transfer.  Note that these
  1161.      routines are only valid for paths that are not classified as "DevPath"'s.
  1162.  
  1163.      In release 6.3 there was added a new Digital Media Buffering API (termed
  1164.      "dmBuffers") that facilitates exchanging buffers with other media
  1165.      libraries in an efficient manner.  The previous Digital Media Ring Buffer
  1166.      API (termed "DMRB") is compatible with the old VL and is described first.
  1167.      Since each API has some unique Event handling routines, they are also
  1168.      included here.
  1169.  
  1170.      Note:  In release 6.4, there is a further extension of the Digital Media
  1171.      Buffer interface that is somewhat different than the one described here
  1172.      and is discussed in documention available with that release.  Release 6.5
  1173.      is scheduled to include all the video platforms in a single release with
  1174.      a common Digital Media Buffer interface.
  1175.  
  1176.  
  1177. MMMMVVVVPPPP BBBBuuuuffffffffeeeerrrr aaaannnndddd EEEEvvvveeeennnntttt DDDDMMMMRRRRBBBB RRRRoooouuuuttttiiiinnnneeeessss
  1178.      vvvvllllGGGGeeeettttTTTTrrrraaaannnnssssffffeeeerrrrSSSSiiiizzzzeeee((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr,,,, VVVVLLLLPPPPaaaatttthhhh)))) The transfer size in bytes of each
  1179.      buffer is returned as the function value.
  1180.  
  1181.      Note that the transfer size may change if any controls are changed.  If
  1182.  
  1183.  
  1184.  
  1185.                                                                        PPPPaaaaggggeeee 11118888
  1186.  
  1187.  
  1188.  
  1189.  
  1190.  
  1191.  
  1192. mmmmvvvvpppp((((3333ddddmmmm))))                                                              mmmmvvvvpppp((((3333ddddmmmm))))
  1193.  
  1194.  
  1195.  
  1196.      the controls are expected to be changed during the transfer, then the
  1197.      controls should be set at their maximum anticipated values before
  1198.      requesting the transfer size.
  1199.  
  1200.      vvvvllllCCCCrrrreeeeaaaatttteeeeBBBBuuuuffffffffeeeerrrr((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr,,,, VVVVLLLLPPPPaaaatttthhhh,,,, VVVVLLLLNNNNooooddddeeee,,,, nnnnuuuummmmFFFFrrrraaaammmmeeeessss)))) A buffer pool is
  1201.      allocated large enough contain numFrames number of frames and is returned
  1202.      as the function value.  A return value of NULL indicates the request
  1203.      could not be satisfied and vlErrno is set to the error code.
  1204.  
  1205.      Note that the buffer size requirements may change if any controls are
  1206.      changed.  If the controls are expected to be changed during the transfer,
  1207.      then the controls should be set at their maximum anticipated values
  1208.      before the buffer pool is created.
  1209.  
  1210.      vvvvllllDDDDeeeessssttttrrrrooooyyyyBBBBuuuuffffffffeeeerrrr((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr,,,, VVVVLLLLBBBBuuuuffffffffeeeerrrr)))) The buffer pool created by vlCreate
  1211.      buffers is removed from the system.
  1212.  
  1213.      vvvvllllRRRReeeeggggiiiisssstttteeeerrrrBBBBuuuuffffffffeeeerrrr((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr,,,, VVVVLLLLPPPPaaaatttthhhh,,,, VVVVLLLLNNNNooooddddeeee,,,, VVVVLLLLBBBBuuuuffffffffeeeerrrr)))) The buffer allocated
  1214.      with vlCreateBuffer is registered to this video path.  Note that in MVP
  1215.      only one video buffer may be registered to a path, and that a buffer may
  1216.      only be registered to one path.
  1217.  
  1218.      vvvvllllDDDDeeeerrrreeeeggggiiiisssstttteeeerrrrBBBBuuuuffffffffeeeerrrr((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr,,,, VVVVLLLLPPPPaaaatttthhhh,,,, VVVVLLLLNNNNooooddddeeee,,,, VVVVLLLLBBBBuuuuffffffffeeeerrrr)))) The buffer is
  1219.      disassociated with the video path.
  1220.  
  1221.      vvvvllllBBBBuuuuffffffffeeeerrrrAAAAddddvvvviiiisssseeee((((VVVVLLLLBBBBuuuuffffffffeeeerrrr,,,, uuuussssaaaaggggeeeeIIIInnnnffffoooo)))) This advises the video system as to
  1222.      the anticipated usage of the buffer.  If the buffer will be accessed by
  1223.      the user program using the CPU, then VL_BUFFER_ADVISE_ACCESS should be
  1224.      specified.  Otherwise, VL_BUFFER_ADVISE_NOACCESS should be specified
  1225.      which will greatly reduce the overhead of dealing with the CPU cache.
  1226.  
  1227.      vvvvllllBBBBuuuuffffffffeeeerrrrGGGGeeeettttFFFFdddd((((VVVVLLLLBBBBuuuuffffffffeeeerrrr)))) An FD is returned as the function value that can
  1228.      be used in a select call to indicate when there is space available in the
  1229.      buffer for paths that are outputting video.
  1230.  
  1231.      vvvvllllBBBBuuuuffffffffeeeerrrrDDDDoooonnnneeee((((VVVVLLLLBBBBuuuuffffffffeeeerrrr)))) The "buffer done" bit is checked which normally
  1232.      indicates that the sending side has finished transferring.
  1233.  
  1234.      vvvvllllBBBBuuuuffffffffeeeerrrrRRRReeeesssseeeetttt((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr,,,, VVVVLLLLBBBBuuuuffffffffeeeerrrr)))) The "buffer done" bit is reset.
  1235.  
  1236.      vvvvllllGGGGeeeettttNNNNeeeexxxxttttFFFFrrrreeeeeeee((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr,,,, VVVVLLLLBBBBuuuuffffffffeeeerrrr,,,, ssssiiiizzzzeeee)))) An empty buffer is allocated from
  1237.      the pool and it's "info" pointer is returned to the caller.  NULL
  1238.      indicates that there are no empty buffers at the moment.
  1239.  
  1240.      (See vlGetActiveRegion to obtain a pointer to the data area.)
  1241.  
  1242.      vvvvllllPPPPuuuuttttVVVVaaaalllliiiidddd((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr ssssvvvvrrrr,,,, VVVVLLLLBBBBuuuuffffffffeeeerrrr bbbbuuuuffffffffeeeerrrr)))) The oldest buffer obtained by
  1243.      the vlGetNextFree call is sent to the other side of the path.
  1244.  
  1245.      Normally these are buffers that are filled with data for output, but they
  1246.      could also be empty buffers sent to the video capture to be filled with
  1247.      data.  (Note that this is NOT required in that if there are no
  1248.  
  1249.  
  1250.  
  1251.                                                                        PPPPaaaaggggeeee 11119999
  1252.  
  1253.  
  1254.  
  1255.  
  1256.  
  1257.  
  1258. mmmmvvvvpppp((((3333ddddmmmm))))                                                              mmmmvvvvpppp((((3333ddddmmmm))))
  1259.  
  1260.  
  1261.  
  1262.      preallocated buffers sent the video driver will allocate one if there is
  1263.      space in the buffer pool.)
  1264.  
  1265.      vvvvllllGGGGeeeettttNNNNeeeexxxxttttVVVVaaaalllliiiidddd((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr,,,, VVVVLLLLBBBBuuuuffffffffeeeerrrr)))) An "info" pointer to the next buffer
  1266.      containing a valid image is returned to the user.  Any intervening non-
  1267.      data events are discared during the processing of this function.
  1268.  
  1269.      NULL indicates that there are none available at the moment.
  1270.  
  1271.      (See vlGetActiveRegion to obtain a pointer to the data area.)
  1272.  
  1273.      vvvvllllGGGGeeeettttLLLLaaaatttteeeessssttttVVVVaaaalllliiiidddd((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr,,,, VVVVLLLLBBBBuuuuffffffffeeeerrrr))))
  1274.  
  1275.      An "info" pointer to the last buffer containing a valid image is returned
  1276.      to the user.  All previous data buffers (and non- data events) are
  1277.      discarded during the processing of this function.
  1278.  
  1279.      NULL indicates that there are none available at the moment.
  1280.  
  1281.      (See vlGetActiveRegion to obtain a pointer to the data area.)
  1282.  
  1283.      [Note that this routine was used to get around a problem in the old VL
  1284.      video daemon in that there was not real way to determine the number of
  1285.      buffers available for each data event.  This is no longer true with
  1286.      DVL/MVP and this function could easily be made obsolete with correct
  1287.      programming of the VL program.  (See EXAMPLES below)]
  1288.  
  1289.      vvvvllllPPPPuuuuttttFFFFrrrreeeeeeee((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr,,,, VVVVLLLLBBBBuuuuffffffffeeeerrrr)))) The oldest buffer that was obtained with
  1290.      vlGetNextValid or vlGetLatestValid is returned to the buffer pool.
  1291.  
  1292.      vvvvllllGGGGeeeettttAAAAccccttttiiiivvvveeeeRRRReeeeggggiiiioooonnnn((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr,,,, VVVVLLLLBBBBuuuuffffffffeeeerrrr,,,, VVVVLLLLIIIInnnnffffooooPPPPttttrrrr)))) This will return a
  1293.      pointer to the active data area.
  1294.  
  1295.      vvvvllllGGGGeeeettttDDDDMMMMeeeeddddiiiiaaaaIIIInnnnffffoooo((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr ssssvvvvrrrr,,,, VVVVLLLLBBBBuuuuffffffffeeeerrrr bbbbuuuuffffffffeeeerrrr,,,, VVVVLLLLIIIInnnnffffooooPPPPttttrrrr iiiinnnnffffoooo))))
  1296.  
  1297.      This will return a pointer to the DMedia Info structure.  See
  1298.      /usr/include/sys/dmcommon.h for more details.
  1299.  
  1300.      vlGetImageInfo(VLServer svr, VLBuffer buffer, VLInfoPtr info)
  1301.  
  1302.      This will return a pointer to the Image Info structure.  See
  1303.      /usr/include/sys/dmcommon.h for more details.
  1304.  
  1305.      The following routines are also ONLY available with the DMRB:
  1306.  
  1307.      Note that there are two ways to control the VL transfer with the DMRB.
  1308.      The first being that you can use the FD returned by vlGetFD in a select
  1309.      call (with of course other FD's the program may be monitoring) that
  1310.      sleeps until there is an "event" or some required processing wakes up the
  1311.      select call.
  1312.  
  1313.      The alternative is simliar to the X Server in that you can register which
  1314.  
  1315.  
  1316.  
  1317.                                                                        PPPPaaaaggggeeee 22220000
  1318.  
  1319.  
  1320.  
  1321.  
  1322.  
  1323.  
  1324. mmmmvvvvpppp((((3333ddddmmmm))))                                                              mmmmvvvvpppp((((3333ddddmmmm))))
  1325.  
  1326.  
  1327.  
  1328.      function you want called when specific events on specific paths occur.
  1329.      In addition, you can register handlers for any other FD's the application
  1330.      may be interested in.  Then the application program basically relinquishs
  1331.      control to vlMainLoop() and processes all subsequent "events" or process
  1332.      requests via callbacks.
  1333.  
  1334.      The first method uses:
  1335.  
  1336.      vvvvllllGGGGeeeettttFFFFDDDD((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr)))) vvvvllllCCCCoooonnnnnnnneeeeccccttttiiiioooonnnnNNNNuuuummmmbbbbeeeerrrr((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr)))) Get an FD representing the
  1337.      server and on which the user may select on to indicate when events are
  1338.      ready to be processed.  For video capture this includes data and control
  1339.      events.  For video output this includes control events only.
  1340.  
  1341.      vvvvllllBBBBuuuuffffffffeeeerrrrGGGGeeeettttFFFFdddd((((VVVVLLLLBBBBuuuuffffffffeeeerrrr)))) Get an FD representing the buffer and that wakes
  1342.      up when there is space available in the buffer.  This is handy when the
  1343.      user app is outputting video and wants to wake up when space has been
  1344.      freed up.
  1345.  
  1346.      vvvvllllNNNNeeeexxxxttttEEEEvvvveeeennnntttt((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr,,,, VVVVLLLLEEEEvvvveeeennnntttt ****)))) Get the next event off the queue after
  1347.      the FD returned by vlGetFD causes the select to wakeup.
  1348.  
  1349.      And the second method uses (note that vlNextEvent is also used in the
  1350.      "handler" defined with vlAddCallback).
  1351.  
  1352.      vvvvllllAAAAddddddddCCCCaaaallllllllbbbbaaaacccckkkk((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr,,,, VVVVLLLLPPPPaaaatttthhhh,,,, VVVVLLLLEEEEvvvveeeennnnttttMMMMaaaasssskkkk,,,, VVVVLLLLCCCCaaaallllllllbbbbaaaacccckkkkPPPPrrrroooocccc,,,, vvvvooooiiiidddd ****)))) Add
  1353.      VLCallbackProc to handle VLEventMask events on the path specified.
  1354.  
  1355.      vvvvllllRRRReeeemmmmoooovvvveeeeCCCCaaaallllllllbbbbaaaacccckkkk((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr,,,, VVVVLLLLPPPPaaaatttthhhhppppaaaatttthhhh,,,, VVVVLLLLEEEEvvvveeeennnnttttMMMMaaaasssskkkk,,,, VVVVLLLLCCCCaaaallllllllbbbbaaaacccckkkkPPPPrrrroooocccc,,,, void
  1356.      *) Remove the callback procedure.
  1357.  
  1358.      vvvvllllRRRReeeemmmmoooovvvveeeeAAAAllllllllCCCCaaaallllllllbbbbaaaacccckkkkssss((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr,,,, VVVVLLLLPPPPaaaatttthhhhppppaaaatttthhhh,,,, VVVVLLLLEEEEvvvveeeennnnttttMMMMaaaasssskkkk)))) Remove all
  1359.      callback procedures.
  1360.  
  1361.      vvvvllllCCCCaaaallllllllCCCCaaaallllllllbbbbaaaacccckkkkssss((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr,,,, VVVVLLLLEEEEvvvveeeennnntttt ****)))) Call all callback procedures that
  1362.      have expressed an interest in the specified event.
  1363.  
  1364.      vvvvllllRRRReeeeggggiiiisssstttteeeerrrrHHHHaaaannnnddddlllleeeerrrr((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr,,,, ffffdddd,,,, VVVVLLLLEEEEvvvveeeennnnttttHHHHaaaannnnddddlllleeeerrrr,,,, VVVVLLLLPPPPeeeennnnddddiiiinnnnggggFFFFuuuunnnncccc,,,, vvvvooooiiiidddd ****))))
  1365.      Register VLEventHandler (using VLPendingFunc to determine if an event is
  1366.      pending) to service device on "fd" when it becomes active during a
  1367.      select.
  1368.  
  1369.      vvvvllllRRRReeeemmmmoooovvvveeeeHHHHaaaannnnddddlllleeeerrrr((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr,,,, ffffdddd)))) Remove the handler associated with the
  1370.      device on "fd".
  1371.  
  1372.      vvvvllllMMMMaaaaiiiinnnnLLLLoooooooopppp((((vvvvooooiiiidddd)))) After setting up the required handlers and callbacks,
  1373.      the user is requesting that the VL take over waiting for events and
  1374.      simply call the event handlers when appropriate.
  1375.  
  1376.      Other routines that may be useful in either method are:
  1377.  
  1378.      vvvvllllPPPPeeeennnnddddiiiinnnngggg((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr)))) Check whether there are pending events.
  1379.  
  1380.  
  1381.  
  1382.  
  1383.                                                                        PPPPaaaaggggeeee 22221111
  1384.  
  1385.  
  1386.  
  1387.  
  1388.  
  1389.  
  1390. mmmmvvvvpppp((((3333ddddmmmm))))                                                              mmmmvvvvpppp((((3333ddddmmmm))))
  1391.  
  1392.  
  1393.  
  1394.      vvvvllllCCCChhhheeeecccckkkkEEEEvvvveeeennnntttt((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr,,,, VVVVLLLLEEEEvvvveeeennnnttttMMMMaaaasssskkkk,,,, VVVVLLLLEEEEvvvveeeennnntttt ****)))) Check if any events listed
  1395.      in the VLEventMask is queued, and if so return it.
  1396.  
  1397.      vvvvllllPPPPeeeeeeeekkkkEEEEvvvveeeennnntttt((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr,,,, VVVVLLLLEEEEvvvveeeennnntttt ****)))) Look at the next event on the queue
  1398.      without dequeuing it.
  1399.  
  1400.  
  1401.  
  1402. MMMMVVVVPPPP DDDDiiiiggggiiiittttaaaallll MMMMeeeeddddiiiiaaaa BBBBuuuuffffffffeeeerrrr RRRRoooouuuuttttiiiinnnneeeessss
  1403.      vvvvllllDDDDMMMMPPPPoooooooollllGGGGeeeettttPPPPaaaarrrraaaammmmssss((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr,,,, VVVVLLLLPPPPaaaatttthhhh,,,, VVVVLLLLNNNNooooddddeeee,,,, DDDDMMMMppppaaaarrrraaaammmmssss ****)))) Get the
  1404.      parameters associated with a video path.  Note that all pertinent
  1405.      controls must have been set prior to this call.  If the user program is
  1406.      expecting to change any controls that affect the size of the buffer, then
  1407.      the controls should be set to their maximum values prior to this call.
  1408.  
  1409.      vvvvllllDDDDMMMMPPPPoooooooollllRRRReeeeggggiiiisssstttteeeerrrr((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr,,,, VVVVLLLLPPPPaaaatttthhhh,,,, VVVVLLLLNNNNooooddddeeee,,,, DDDDMMMMbbbbuuuuffffffffeeeerrrrppppoooooooollll)))) Register a DMS
  1410.      Buffer Pool to this path.  Only one buffer pool may be registered to any
  1411.      one path.
  1412.  
  1413.      vvvvllllDDDDMMMMPPPPoooooooollllDDDDeeeerrrreeeeggggiiiisssstttteeeerrrr((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr,,,, VVVVLLLLPPPPaaaatttthhhh,,,, VVVVLLLLNNNNooooddddeeee,,,, DDDDMMMMbbbbuuuuffffffffeeeerrrrppppoooooooollll)))) Disassociate a
  1414.      DMS Buffer Pool with this path.
  1415.  
  1416.      vvvvllllDDDDMMMMBBBBuuuuffffffffeeeerrrrSSSSeeeennnndddd((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr,,,, VVVVLLLLPPPPaaaatttthhhh,,,, DDDDMMMMbbbbuuuuffffffffeeeerrrr)))) Send a DMS buffer to the other
  1417.      side of the stream.
  1418.  
  1419.      vvvvllllPPPPaaaatttthhhhGGGGeeeettttFFFFDDDD((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr,,,, VVVVLLLLPPPPaaaatttthhhh,,,, iiiinnnntttt ****rrrreeeetttt____ffffdddd)))) Get an FD associated with the
  1420.      path for use with a select call.  This FD will wake up when there are
  1421.      events to be received on the video stream.  This includes data and
  1422.      control events for video capture and control events for video output.
  1423.  
  1424.      vvvvllllEEEEvvvveeeennnnttttRRRReeeeccccvvvv((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr,,,, VVVVLLLLPPPPaaaatttthhhh,,,, VVVVLLLLEEEEvvvveeeennnntttt ****)))) Receive any events pending for
  1425.      this path after the FD from vlPathGetFD causes the select to wakeup.
  1426.  
  1427.      vvvvllllEEEEvvvveeeennnnttttTTTTooooDDDDMMMMBBBBuuuuffffffffeeeerrrr((((VVVVLLLLEEEEvvvveeeennnntttt ****,,,, DDDDMMMMbbbbuuuuffffffffeeeerrrr ****)))) Get the pointer to a DMS buffer
  1428.      associated with a VL event.
  1429.  
  1430.  
  1431. MMMMVVVVPPPP EEEEvvvveeeennnntttt CCCCoooommmmmmmmoooonnnn AAAAPPPPIIII''''ssss RRRRoooouuuuttttiiiinnnneeeessss
  1432.      VVVVLLLLEEEEvvvveeeennnnttttTTTTooooMMMMaaaasssskkkk((((VVVVLLLLeeeevvvveeeennnntttt)))) The VL event is converted to a VLEventMask value.
  1433.  
  1434.      vvvvllllSSSSeeeelllleeeeccccttttEEEEvvvveeeennnnttttssss((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr,,,, VVVVLLLLPPPPaaaatttthhhh,,,, VVVVLLLLEEEEvvvveeeennnnttttMMMMaaaasssskkkk)))) Select which VL events the
  1435.      user program wants to receive.
  1436.  
  1437.      vvvvllllEEEEvvvveeeennnnttttTTTTooooNNNNaaaammmmeeee((((iiiinnnntttt ttttyyyyppppeeee)))) Translate an event into an ascii string.
  1438.  
  1439.      vvvvllllSSSSeeeerrrrvvvveeeerrrrPPPPrrrroooottttooooccccoooollllVVVVeeeerrrrssssiiiioooonnnn((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr)))) Get the version of the VL protocol.
  1440.  
  1441.      vvvvllllSSSSeeeerrrrvvvveeeerrrrPPPPrrrroooottttooooccccoooollllRRRReeeevvvviiiissssiiiioooonnnn((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr)))) Get the revision of the VL protocol.
  1442.  
  1443.      vvvvllllSSSSeeeerrrrvvvveeeerrrrVVVVeeeennnnddddoooorrrrRRRReeeelllleeeeaaaasssseeee((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr)))) Get the release number of the VL
  1444.      protocol.
  1445.  
  1446.  
  1447.  
  1448.  
  1449.                                                                        PPPPaaaaggggeeee 22222222
  1450.  
  1451.  
  1452.  
  1453.  
  1454.  
  1455.  
  1456. mmmmvvvvpppp((((3333ddddmmmm))))                                                              mmmmvvvvpppp((((3333ddddmmmm))))
  1457.  
  1458.  
  1459.  
  1460.      vvvvllllSSSSeeeerrrrvvvveeeerrrrSSSSttttrrrriiiinnnngggg((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr)))) Get the name of the video server.
  1461.  
  1462.  
  1463. MMMMVVVVPPPP AAAAuuuuddddiiiioooo////VVVViiiiddddeeeeoooo SSSSyyyynnnncccchhhhrrrroooonnnniiiizzzzaaaattttiiiioooonnnn RRRRoooouuuuttttiiiinnnneeeessss
  1464.      These routines let you compute the Unadjusted System Time (UST) for any
  1465.      field or frame in your transfer.  They are only supported when VL_RATE is
  1466.      the maximum rate (50/1 or 60/1) for the current video timing.
  1467.  
  1468.      vvvvllllGGGGeeeettttFFFFrrrroooonnnnttttiiiieeeerrrrMMMMSSSSCCCC((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr,,,, VVVVLLLLPPPPaaaatttthhhh,,,, VVVVLLLLNNNNooooddddeeee)))) vvvvllllGGGGeeeettttFFFFiiiilllllllleeeedddd((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr,,,, VVVVLLLLPPPPaaaatttthhhh,,,,
  1469.      VVVVLLLLBBBBuuuuffffffffeeeerrrr bbbbuuuuffffffffeeeerrrr)))) vvvvllllGGGGeeeettttPPPPaaaatttthhhhDDDDeeeellllaaaayyyy((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr,,,, VVVVLLLLPPPPaaaatttthhhh,,,, VVVVLLLLNNNNooooddddeeee,,,, VVVVLLLLPPPPoooorrrrtttt,,,,
  1470.      VVVVLLLLNNNNooooddddeeee2222,,,, VVVVLLLLPPPPoooorrrrtttt2222)))) vvvvllllGGGGeeeettttUUUUSSSSTTTTMMMMSSSSCCCCPPPPaaaaiiiirrrr((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr,,,, VVVVLLLLPPPPaaaatttthhhh,,,, VVVVLLLLNNNNooooddddeeee,,,, VVVVLLLLPPPPoooorrrrtttt,,,,
  1471.      VVVVLLLLNNNNooooddddeeee,,,, UUUUSSSSTTTTMMMMSSSSCCCCppppaaaaiiiirrrr****)))) vvvvllllGGGGeeeettttUUUUSSSSTTTTPPPPeeeerrrrMMMMSSSSCCCC((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr,,,, VVVVLLLLPPPPaaaatttthhhh,,,, VVVVLLLLNNNNooooddddeeee))))
  1472.  
  1473.      These routines are described in other Video Library man pages.
  1474.  
  1475.      Because all mvp paths involve memory, mvp does not implement
  1476.      vlGetPathDelay().
  1477.  
  1478.           NNNNooootttteeee:::: The vvvvllllGGGGeeeettttFFFFrrrroooonnnnttttiiiieeeerrrrMMMMSSSSCCCC((((3333ddddmmmm)))) manpage has the following statement
  1479.           under the CCCCAAAAVVVVEEEEAAAATTTTSSSS section:
  1480.  
  1481.                For some VL devices, there is a short initial period (up to ten
  1482.                field times) in the lifetime of a transfer during which no
  1483.                frontier MSC is available.  This period begins when the
  1484.                application calls vvvvllllBBBBeeeeggggiiiinnnnTTTTrrrraaaannnnssssffffeeeerrrr((((3333ddddmmmm)))) and ends when the device
  1485.                clocks in or out its first media stream sample from the
  1486.                application's VLBuffer.  An attempt to call
  1487.                vvvvllllGGGGeeeettttFFFFrrrroooonnnnttttiiiieeeerrrrMMMMSSSSCCCC((((3333ddddmmmm)))) during this period will block the
  1488.                application until the end of the period, when a valid frontier
  1489.                MSC is available.
  1490.  
  1491.           Previous to patch2836 (Irix 6.3) and the Irix6.5 version of the MVP
  1492.           driver, an attempt to access an "early" Frontier MSC would return an
  1493.           unreliable MSC until the video device had actually transferred at
  1494.           least 2 fields or a frame.  In patch2836 and Irix 6.5, the driver
  1495.           will now correctly wait until the Frontier MSC is "valid".  To
  1496.           enable this new behaviour, you must set the systune variable
  1497.           mmmmvvvvppppeeeeaaaarrrrllllyyyy____ffffrrrroooonnnnttttiiiieeeerrrrmmmmsssscccc to a "0".  [See systune(1M) for more details.]
  1498.           After this is done, some applications may seem to hang, or act
  1499.           strangely if they are not programmed correctly.
  1500.  
  1501.  
  1502.  
  1503. MMMMVVVVPPPP TTTTrrrraaaannnnssssffffeeeerrrr RRRRoooouuuuttttiiiinnnneeeessss
  1504.      vvvvllllBBBBeeeeggggiiiinnnnTTTTrrrraaaannnnssssffffeeeerrrr((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr,,,, VVVVLLLLPPPPaaaatttthhhh,,,, ccccoooouuuunnnntttt,,,, VVVVLLLLTTTTrrrraaaannnnssssffffeeeerrrrDDDDeeeessssccccrrrriiiippppttttoooorrrr ****)))) Initiate
  1505.      a data transfer.  The following modes are supported:
  1506.  
  1507.      VLTransferDescriptor Modes
  1508.  
  1509.      VVVVLLLL____TTTTRRRRAAAANNNNSSSSFFFFEEEERRRR____MMMMOOOODDDDEEEE____CCCCOOOONNNNTTTTIIIINNNNUUUUOOOOUUUUSSSS
  1510.  
  1511.      The transfer is initiated to be a continuous transfer and the user
  1512.  
  1513.  
  1514.  
  1515.                                                                        PPPPaaaaggggeeee 22223333
  1516.  
  1517.  
  1518.  
  1519.  
  1520.  
  1521.  
  1522. mmmmvvvvpppp((((3333ddddmmmm))))                                                              mmmmvvvvpppp((((3333ddddmmmm))))
  1523.  
  1524.  
  1525.  
  1526.      program is resumed after startup.
  1527.  
  1528.      VVVVLLLL____TTTTRRRRAAAANNNNSSSSFFFFEEEERRRR____MMMMOOOODDDDEEEE____DDDDIIIISSSSCCCCRRRREEEETTTTEEEE
  1529.  
  1530.      The transfer is initiated to be a discrete transfer, usually of some
  1531.      number of frames.  The user program is stalled while the transfer is in
  1532.      progress and is resumed when all the frames have been transferred.
  1533.  
  1534.      VVVVLLLL____TTTTRRRRAAAANNNNSSSSFFFFEEEERRRR____MMMMOOOODDDDEEEE____AAAAUUUUTTTTOOOOTTTTRRRRIIIIGGGGGGGGEEEERRRR
  1535.  
  1536.      The transfer is initiated upon some trigger event which is a subset of
  1537.      the VL events.  Currently, VLDeviceEvent is the only trigger event
  1538.      supported by MVP.
  1539.  
  1540.      vvvvllllEEEEnnnnddddTTTTrrrraaaannnnssssffffeeeerrrr((((VVVVLLLLSSSSeeeerrrrvvvveeeerrrr,,,, VVVVLLLLPPPPaaaatttthhhh)))) The continuous transfer started with
  1541.      vlBeginTransfer is stopped.
  1542.  
  1543.  
  1544. MMMMVVVVPPPP EEEEvvvveeeennnnttttssss
  1545.      VVVVLLLLSSSSttttrrrreeeeaaaammmmBBBBuuuussssyyyy The stream is already locked by someone else.
  1546.  
  1547.      VVVVLLLLSSSSttttrrrreeeeaaaammmmPPPPrrrreeeeeeeemmmmpppptttteeeedddd The stream was grabbed by another path.  Use
  1548.      stream_usage == VL_LOCK to prevent this.
  1549.  
  1550.      VVVVLLLLAAAAddddvvvvaaaannnncccceeeeMMMMiiiisssssssseeeedddd The trigger time has already past.
  1551.  
  1552.      VVVVLLLLSSSSttttrrrreeeeaaaammmmAAAAvvvvaaaaiiiillllaaaabbbblllleeee The stream has been released by another using path.
  1553.  
  1554.      VVVVLLLLSSSSyyyynnnnccccLLLLoooosssstttt Sync isn't being detected.  This happens for example, when the
  1555.      user pulls the video cable out.
  1556.  
  1557.      VVVVLLLLSSSSttttrrrreeeeaaaammmmSSSSttttaaaarrrrtttteeeedddd ---- SSSSttttrrrreeeeaaaammmm ssssttttaaaarrrrtttteeeedddd ddddeeeelllliiiivvvveeeerrrryyyy
  1558.      VVVVLLLLSSSSttttrrrreeeeaaaammmmSSSSttttooooppppppppeeeedddd ---- SSSSttttrrrreeeeaaaammmm ssssttttooooppppppppeeeedddd ddddeeeelllliiiivvvveeeerrrryyyy
  1559.      These are primarily for those paths in which there is a direct connection
  1560.      between video nodes and there are no individual transfer events.  MVP
  1561.      does send these though.
  1562.  
  1563.      VVVVLLLLSSSSeeeeqqqquuuueeeennnncccceeeeLLLLoooosssstttt A Field/Frame dropped.  This means that "for some reason"
  1564.      the driver missed a frame.  You can also check using the MSC values.
  1565.      (Though output is a little trickier to check).
  1566.  
  1567.      VVVVLLLLCCCCoooonnnnttttrrrroooollllCCCChhhhaaaannnnggggeeeedddd A Control has been changed by either VCP or some other
  1568.      program.
  1569.  
  1570.      VVVVLLLLTTTTrrrraaaannnnssssffffeeeerrrrCCCCoooommmmpppplllleeeetttteeee A transfer has been completed.  For input to memory,
  1571.      there is also a data buffer associated with the event.
  1572.  
  1573.      VVVVLLLLTTTTrrrraaaannnnssssffffeeeerrrrFFFFaaaaiiiilllleeeedddd A transfer has failed.  This tells you that there's
  1574.      trouble and won't be getting anything more on this path.
  1575.  
  1576.      VVVVLLLLEEEEvvvveeeennnnVVVVeeeerrrrttttiiiiccccaaaallllRRRReeeettttrrrraaaacccceeee ---- AAAA VVVVeeeerrrrttttiiiiccccaaaallll RRRReeeettttrrrraaaacccceeee eeeevvvveeeennnntttt
  1577.      VVVVLLLLOOOOddddddddVVVVeeeerrrrttttiiiiccccaaaallllRRRReeeettttrrrraaaacccceeee ---- AAAA VVVVeeeerrrrttttiiiiccccaaaallll RRRReeeettttrrrraaaacccceeee eeeevvvveeeennnntttt
  1578.  
  1579.  
  1580.  
  1581.                                                                        PPPPaaaaggggeeee 22224444
  1582.  
  1583.  
  1584.  
  1585.  
  1586.  
  1587.  
  1588. mmmmvvvvpppp((((3333ddddmmmm))))                                                              mmmmvvvvpppp((((3333ddddmmmm))))
  1589.  
  1590.  
  1591.  
  1592.      VVVVLLLLFFFFrrrraaaammmmeeeeVVVVeeeerrrrttttiiiiccccaaaallllRRRReeeettttrrrraaaacccceeee ---- AAAA VVVVeeeerrrrttttiiiiccccaaaallll RRRReeeettttrrrraaaacccceeee eeeevvvveeeennnntttt
  1593.      Can be used on some devices for timing reasons.  MVP supplies these, but
  1594.      only if a transfer is in progress.
  1595.  
  1596.      VVVVLLLLDDDDeeeevvvviiiicccceeeeEEEEvvvveeeennnntttt The GPI input signal has triggered.
  1597.  
  1598.      VVVVLLLLDDDDeeeeffffaaaauuuullllttttSSSSoooouuuurrrrcccceeee Default Source Changed.  This means the user has selected
  1599.      a different input and VL programs may change their input to match, if
  1600.      programmed to do so.
  1601.  
  1602.      VVVVLLLLCCCCoooonnnnttttrrrroooollllRRRRaaaannnnggggeeeeCCCChhhhaaaannnnggggeeeedddd The range of a control has changed.  This might
  1603.      occur, for example, when the timing has been changed a new range for
  1604.      VL_SIZE might become available.
  1605.  
  1606.      VVVVLLLLCCCCoooonnnnttttrrrroooollllPPPPrrrreeeeeeeemmmmpppptttteeeedddd This path's usage of the controls has been preempted
  1607.      by another path.
  1608.  
  1609.      VVVVLLLLCCCCoooonnnnttttrrrroooollllAAAAvvvvaaaaiiiillllaaaabbbblllleeee The other path has relinquished the controls and they
  1610.      are now again available.
  1611.  
  1612.  
  1613.  
  1614. GGGGPPPPIIII GGGGeeeennnneeeerrrraaaallll PPPPuuuurrrrppppoooosssseeee IIIInnnntttteeeerrrrrrrruuuupppptttt
  1615.      (For the un-initiated, GPI is NOT a pulse. It's a state and asserting a
  1616.      GPI means changing the state from low to high or high to low.)
  1617.  
  1618.      Basically, VLControlValue union is extended to support transfer_trigger,
  1619.      gpi_out (for output triggering) and gpi_state (for explicitly setting and
  1620.      querying the GPI lines) controls.
  1621.  
  1622.      1) transfer_trigger control can be used to setup the trigger control for
  1623.      beginning the transfer. The triggers supported in MVP is GPI only.
  1624.  
  1625.      2) gpi_out control is used to program the gpi_out line.  Two conditions
  1626.      are supported for asserting the GPI line : transfer_start, transfer_stop
  1627.      You can have multiple trigger conditions outstanding.
  1628.  
  1629.      To clear the triggers, use gpi_state control with clear flag.  All
  1630.      outstanding trigger controls on the particular line are cleared.
  1631.  
  1632.      3) gpi_state control is used to set/get the state of gpi lines. The
  1633.      states are ON, OFF, PULSE (transition for 1 field time) and clear.
  1634.  
  1635.      VL API is being enhanced to support GPI as a device independent
  1636.      interface.  GPI triggers are supported in three vlSetControl()
  1637.      interfaces:
  1638.  
  1639.      The union VLControlValue is extended to support transfer_trigger, gpi_out
  1640.      (for output triggering) and gpi_state (for explicitly setting and
  1641.      querying the GPI lines) controls.
  1642.  
  1643.      1) transfer_trigger (VL_TRANSFER_TRIGGER)
  1644.  
  1645.  
  1646.  
  1647.                                                                        PPPPaaaaggggeeee 22225555
  1648.  
  1649.  
  1650.  
  1651.  
  1652.  
  1653.  
  1654. mmmmvvvvpppp((((3333ddddmmmm))))                                                              mmmmvvvvpppp((((3333ddddmmmm))))
  1655.  
  1656.  
  1657.  
  1658.      This  control can be used to setup the triggering for beginning the
  1659.      transfers on a path. This control is supported on Video nodes.
  1660.  
  1661.      The following code illustrates a GPI based trigger transfer setup,
  1662.  
  1663.      VLControlValue val;
  1664.  
  1665.      val.xfer_trigger.triggerType = VL_TRIGGER_GPI;
  1666.      val.xfer_trigger.value.instance = <which GPI input line>
  1667.      vlSetControl(svr,path,VL_TRANSFER_TRIGGER,&val);
  1668.  
  1669.  
  1670.      2) gpi_out (VL_GPI_OUT_MODE)
  1671.  
  1672.      This control is used to program the gpi_out line. Two conditions are
  1673.      supported for asserting the GPI line:  transfer_start, transfer_stop.
  1674.      You can have multiple trigger conditions outstanding.
  1675.  
  1676.      The following code segment illustrates a setup for the gpi_out line 1 to
  1677.      toggle at the beginning and end of transfer.
  1678.  
  1679.      VLControlValue val;
  1680.  
  1681.      /* make sure the GPI line is high */
  1682.      val.gpi_state.gpi = VL_GPI_OUT;
  1683.      val.gpi_state.instance = <which GPI line>;
  1684.      val.gpi_state.state = VL_GPI_OFF;
  1685.      vlSetControl(svr,path,VL_GPI_STATE,&val);
  1686.  
  1687.      /* transfer start */
  1688.      val.gpi_out.condition = VL_GPI_OUT_XFER_START;
  1689.      val.gpi_out.instance  = <which GPI output line >;
  1690.      val.gpi_out.state     = VL_GPI_ON;
  1691.  
  1692.      vlSetControl(svr,path,VL_GPI_OUT_MODE,&val);
  1693.  
  1694.      /* transfer stop */
  1695.      val.gpi_out.condition = VL_GPI_OUT_XFER_STOP;
  1696.      val.gpi_out.instance  = <which GPI output line >;
  1697.      val.gpi_out.state     = VL_GPI_OFF;
  1698.  
  1699.      vlSetControl(svr,path,VL_GPI_OUT_MODE,&val);
  1700.  
  1701.  
  1702.      To clear the triggers, use gpi_state control with clear flag.  All
  1703.      outstanding trigger controls on the particular line are cleared.
  1704.  
  1705.      3) gpi_state (VL_GPI_STATE)
  1706.  
  1707.      This control is used to query the state of the input_gpi lines and
  1708.      set/get the state of output_gpi lines. The states are ON, OFF,
  1709.      PULSE(transition for 1 field time) and CLEAR.
  1710.  
  1711.  
  1712.  
  1713.                                                                        PPPPaaaaggggeeee 22226666
  1714.  
  1715.  
  1716.  
  1717.  
  1718.  
  1719.  
  1720. mmmmvvvvpppp((((3333ddddmmmm))))                                                              mmmmvvvvpppp((((3333ddddmmmm))))
  1721.  
  1722.  
  1723.  
  1724.      This code fragment clears all output triggers on the specified line:
  1725.      VLControlValue val;
  1726.  
  1727.      val.gpi_state.gpi  = VL_GPI_OUT;
  1728.      val.gpi_state.instance  = <which GPI line>;
  1729.      val.gpi_state.state = VL_GPI_CLEAR;
  1730.  
  1731.      vlSetControl(svr,path,VL_GPI_STATE,&val);
  1732.  
  1733.  
  1734.      See /usr/include/dmedia/vl.h for specific details on the various controls
  1735.      and settings.
  1736.  
  1737.  
  1738. PPPPrrrrooooggggrrrraaaammmmmmmmiiiinnnngggg EEEExxxxaaaammmmmmmmpppplllleeee ffffoooorrrr SSSSeeeelllleeeeccccttttiiiinnnngggg NNNNooooddddeeeessss
  1739.      Future O2 may (and other SGI systems usually) have different video input
  1740.      and output capabilities.  By checking the device list with
  1741.      vlGetDeviceList(), the user program can discover which video connections
  1742.      exist, without having to reprogram their applications for each video
  1743.      interface.
  1744.  
  1745.      The following routine shows one method of doing this.
  1746.  
  1747.      /*
  1748.      * getVideoInputNode example
  1749.      */
  1750.      #include <dmedia/vl.h>
  1751.      #include <stdio.h>
  1752.  
  1753.      #define MAX_NUMBER_NODES 32
  1754.  
  1755.      VLNode
  1756.      getVideoInputNode( VLServer svr )
  1757.      {
  1758.          int dn;     /* device number */
  1759.          int dnn;    /* device's node number */
  1760.          int nn;     /* node table node number */
  1761.          VLDevList devl;
  1762.          VLDevice *dev;
  1763.          VLNodeInfo *ni, *nt[ MAX_NUMBER_NODES ];
  1764.          int selection = -1;
  1765.  
  1766.          if( vlGetDeviceList( svr, &devl ) == -1 ) {
  1767.           vlPerror( "vlGetDeviceList" );
  1768.           return -1;
  1769.          }
  1770.  
  1771.          printf( "0elect one of the following video inputs0 );
  1772.          printf( "0 <default input>0 );
  1773.  
  1774.          /* for each device */
  1775.          for( dn = 0, nn = 0, dev = devl.devices;
  1776.  
  1777.  
  1778.  
  1779.                                                                        PPPPaaaaggggeeee 22227777
  1780.  
  1781.  
  1782.  
  1783.  
  1784.  
  1785.  
  1786. mmmmvvvvpppp((((3333ddddmmmm))))                                                              mmmmvvvvpppp((((3333ddddmmmm))))
  1787.  
  1788.  
  1789.  
  1790.           dn < devl.numDevices;
  1791.            dn++, dev++ ) {
  1792.  
  1793.           /* for each node on each device */
  1794.           for( dnn = 0, ni = dev->nodes;
  1795.                dnn < dev->numNodes && nn < MAX_NUMBER_NODES;
  1796.                dnn++, ni++ ) {
  1797.  
  1798.               /* if it's an input video or screen node,
  1799.                * then list it */
  1800.               if( ni->type == VL_SRC &&
  1801.                ( ni->kind == VL_VIDEO ||
  1802.                  ni->kind == VL_SCREEN ) ) {
  1803.                printf( "%d %s0, nn + 1, ni->name );
  1804.                nt[ nn++ ] = ni;
  1805.               }
  1806.           }
  1807.          }
  1808.  
  1809.          /* get answer into integer "selection" */
  1810.          printf( "> " ); fflush( stdout );
  1811.          scanf( "%d", &selection );
  1812.  
  1813.          /* if selection within range */
  1814.          if( 0 < selection && selection <= nn ) {
  1815.           ni = nt[ selection - 1 ];
  1816.           return vlGetNode( svr, ni->type, ni->kind, ni->number );
  1817.          }
  1818.  
  1819.          /* user didn't decide - so use default source */
  1820.          return vlGetNode( svr, VL_SRC, VL_VIDEO, VL_ANY );
  1821.      }
  1822.  
  1823.      main( int ac, char **av )
  1824.      {
  1825.          VLServer svr = vlOpenVideo( "" );
  1826.          VLNode vidNode = getVideoInputNode( svr );
  1827.          VLNode memNode = vlGetNode( svr, VL_DRN, VL_MEM, VL_ANY );
  1828.          VLPath path = vlCreatePath( svr, VL_ANY, vidNode, memNode );
  1829.  
  1830.          if( vlSetupPaths( svr, &path, 1, VL_SHARE, VL_SHARE ) < 0 ) {
  1831.           vlPerror( "error seting up video path" );
  1832.           exit( 1 );
  1833.          }
  1834.  
  1835.          printf( "0ideo path setup0 );
  1836.      }
  1837.  
  1838.  
  1839.  
  1840.  
  1841.  
  1842.  
  1843.  
  1844.  
  1845.                                                                        PPPPaaaaggggeeee 22228888
  1846.  
  1847.  
  1848.  
  1849.  
  1850.  
  1851.  
  1852. mmmmvvvvpppp((((3333ddddmmmm))))                                                              mmmmvvvvpppp((((3333ddddmmmm))))
  1853.  
  1854.  
  1855.  
  1856. ERRORS
  1857.      The standard VL error codes are applicable:
  1858.  
  1859.      VLSuccess - everything's okay
  1860.      VLBadRequest - bad request code
  1861.      VLBadValue - int parameter out of range
  1862.      VLBadPath - parameter not a path
  1863.      VLBadNode - parameter not a node
  1864.      VLBadAtom - parameter not an atom
  1865.      VLBadDevice - parameter not a device
  1866.      VLBadControl - parameter not a control
  1867.      VLBadMatch - parameter mismatch
  1868.      VLBadAccess - depending on context
  1869.      VLBadAlloc - insufficient resources
  1870.      VLBadIDChoice - choice not in range or already used
  1871.      VLBadName - font or color name doesn't exist
  1872.      VLBadLength - Request length incorrect
  1873.      VLBadIoctl - ioctl failed in the server
  1874.      VLBadImplementation - server is broken
  1875.      VLPathInUse - Path is in exclusive use
  1876.      VLBadServer - Server parameter is invalid
  1877.      VLBadBuffer - Buffer invalid
  1878.      VLBadSize - Buffer size invalid
  1879.      VLNotEnoughResident - we don't have enough resident memory
  1880.      VLBufferTooSmall - the buffer allocated is too small
  1881.      VLValueOutOfRange - the value is out of range (for controls)
  1882.      VLSetupFailed - SetupPath of failed
  1883.      VLBadWinAlloc - Insufficient hardware screen space
  1884.      VLInputsNotLocked - Video input sources cannot be locked
  1885.  
  1886.  
  1887.  
  1888. SSSSEEEEEEEE AAAALLLLSSSSOOOO
  1889.      VLINTRO(3dm), O2Video(7)
  1890.  
  1891.  
  1892.  
  1893.  
  1894.  
  1895.  
  1896.  
  1897.  
  1898.  
  1899.  
  1900.  
  1901.  
  1902.  
  1903.  
  1904.  
  1905.  
  1906.  
  1907.  
  1908.  
  1909.  
  1910.  
  1911.                                                                        PPPPaaaaggggeeee 22229999
  1912.  
  1913.  
  1914.  
  1915.